/* 品牌属性 */
import { defineStore } from 'pinia'
import { ElMessage } from 'element-plus'
import 'element-plus/theme-chalk/el-message.css'
/* 获取接口 */
import {
  getOneCategoryAPI,
  getTwoCategoryAPI,
  getThreeCategoryAPI,
  getAllTrait,
  addTraitAPI,
  deleteAttr,
} from '@/apis/goods/trait/index'
/* 获取属性类型约束类型 */
import type {
  respondGetCategory,
  respondGetTrait,
  dataTrait,
} from '@/apis/goods/trait/traitTypes'
import type { traitTypres } from '../types/traitTypes'
export const userGoodsTrait = defineStore('trait', {
  /* 品牌属性仓库 */
  state: (): traitTypres => {
    return {
      oneCategory: [] /* 一级分类数据 */,
      twoCategory: [] /* 二级分类数据 */,
      threeCategory: [] /* 三级分类 */,
      oneCategoryId: '',
      twoCategoryId: '',
      threeCategoryId: '',
      ratitRespondList: [] /* 已有属性 */,
      dialogTraitVisible: false /* 修改属性弹窗 */,
      updateTitTrait: {
        attrName: '',
        categoryId: '',
        categoryLevel: 3,
        attrValueList: [],
      } /* 修改信息 */,
    }
  },
  /* 同步逻辑 || 异步逻辑 */
  actions: {
    /* 获取一级分类 */
    async getOneCategoryList() {
      const { data: res }: respondGetCategory = await getOneCategoryAPI()
      /* 对相应回来的数据进行校验 */
      if (res.code != 200) ElMessage.error(`获取${res.message}`) /* 获取失败 */
      /* 获取成功 */
      this.oneCategory = res.data
    },
    /* 获取二级分类 */
    async getTwoCategoryList(id: number | string) {
      const { data: res }: respondGetCategory = await getTwoCategoryAPI(id)
      /* 对相应回来的数据进行校验 */
      if (res.code != 200) ElMessage.error(`获取${res.message}`) /* 获取失败 */
      /* 获取成功 */
      this.twoCategory = res.data
    },
    /* 获取三级分类 */
    async getThreeCategoryList(id: number | string) {
      const { data: res }: respondGetCategory = await getThreeCategoryAPI(id)
      /* 对相应回来的数据进行校验 */
      if (res.code != 200) ElMessage.error(`获取${res.message}`) /* 获取失败 */
      /* 获取成功 */
      this.threeCategory = res.data
    },
    /* 获取分类下已有的属性与属性值 */
    async getAllTrait(
      category1ID: number | string,
      category2ID: number | string,
      category3ID: number | string,
    ) {
      const { data: res }: respondGetTrait = await getAllTrait(
        category1ID,
        category2ID,
        category3ID,
      )
      /* 对相应回来的数据进行校验 */
      if (res.code != 200) ElMessage.error(`获取${res.message}`) /* 获取失败 */
      this.ratitRespondList = res.data
    },
    /* 添加属性 */
    async addTrait(data: dataTrait) {
      const { data: res }: any = await addTraitAPI(data)
      /* 对相应回来的数据进行校验 */
      if (res.code != 200) ElMessage.error(`添加${res.message}`) /* 获取失败 */
      this.getAllTrait(
        this.oneCategoryId,
        this.twoCategoryId,
        this.threeCategoryId,
      )
      if (data.id) return ElMessage.success(`修改${res.message}`)
      ElMessage.success(`添加${res.message}`)
    },
    /* 删除属性 */
    async deleteTrait(attrId: number) {
      const { data: res }: respondGetCategory = await deleteAttr(attrId)
      /* 对相应回来的数据进行校验 */
      if (res.code != 200) ElMessage.error(`删除${res.message}`) /* 获取失败 */
      this.getAllTrait(
        this.oneCategoryId,
        this.twoCategoryId,
        this.threeCategoryId,
      )
      ElMessage.success(`删除${res.message}`)
    },
  },
})
